/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controle;

import classes.BancoDeDados;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import modelo.Especie;

/**
 *
 * @author cardodav
 */
public class EspecieDAO {
    
   public List<Especie> getEspecies(String criterio){
    
        List<Especie> _le = new ArrayList<Especie>();
        
        BancoDeDados bd = new BancoDeDados();

        String query = " SELECT e.codigoespecie, e.nomeespecie FROM vetlion.especie e ";
        if (criterio != null){
            query += " where " + criterio;
        }       
        
        ResultSet rs = bd.consultar(query);
        
        try{
            while (rs.next()){
                Especie _e = new Especie();
                 _e = new Especie();
                 _e.setCodigoEspecie(rs.getInt("CODIGOESPECIE"));
                 _e.setNome(rs.getString("NOMEESPECIE"));
                
                 _le.add(_e);
            }   
        } catch (SQLException ex) {
            System.out.println("Erro ao retornar a especie: " + ex.getMessage());            
        }        
        
        return _le;
        
    }
    
    /**
     * deleta o compromisso (o formato da data deve ser YYYY-MM-DD
     * @param CRV
     * @param data 
     */
    public int deletaEspecie(int codEspecie){
        
        int ret = -1;
        
        try{
        
        BancoDeDados bd = new BancoDeDados();        
        String query = "DELETE FROM ESPECIE WHERE CODIGOESPECIE = "+codEspecie+"";    
        
         int regs = bd.executarDML(query);
         
         if (regs > 0){
             ret = regs;
         }
        
        } catch (Exception ex ){
            System.out.println("Erro ao excluir o compromisso: " + ex.getMessage());
        }        
        
        return ret;        
    }
        
    public int inserirEspecie(Especie _e){
        int ret = -1;
        
        try{
        
            BancoDeDados bd = new BancoDeDados();        
        
            String queryNextCodigo = "Select (max(codigoespecie) + 1) proximo from especie";
            ResultSet rs = bd.consultar(queryNextCodigo);
            
            int iProximoCodigo = 0;
            if (rs.next()){
                iProximoCodigo = rs.getInt("proximo");
            }
        
            String query = "INSERT INTO VETLION.ESPECIE ( " +
                        "   CODIGOESPECIE, NOME)  " +
                        "VALUES ( "+iProximoCodigo+",'" + _e.getNome()  + "' ) ";

            int regs = bd.executarDML(query);

            if (regs > 0){
             ret = regs;
            }
        
        } catch (Exception ex ){
            System.out.println("Erro ao incluir a especie: " + ex.getMessage());
        }        
        
        return ret;   
    
    }
    
    public void alterarEspecie(Especie _e){
        BancoDeDados bd = new BancoDeDados();
        
        String queryNextCodigo = "Select (max(codigoespecie) + 1) proximo from especie";
        ResultSet rs = bd.consultar(queryNextCodigo);
        
        int iProximoCodigo = 0;
        try {
            if (rs.next()){
                iProximoCodigo = rs.getInt("proximo");
            }
        } catch (SQLException ex) {
            System.out.println("Erro ao alterar a Especie: " + ex.getMessage());
        }
        String query = "upadate especie set codigoespecie = "+iProximoCodigo+", nome = "+_e.getNome()+" ";        
    }   
    
    public Especie getEspecieByRaca(int codigoRaca){
    
        Especie _e = null;
        
        BancoDeDados bd = new BancoDeDados();

        String query = " SELECT e.codigoespecie, e.nomeespecie FROM vetlion.especie e where codigoespecie in " +
                "( select codigoespecie from raca where codigoraca = " + codigoRaca + " )";
        ResultSet rs = bd.consultar(query);
        
        try {
            if (rs.next()){
                 _e = new Especie();
                 _e.setCodigoEspecie(rs.getInt("CODIGOESPECIE"));
                 _e.setNome(rs.getString("NOMEESPECIE"));
            }
        } catch (SQLException ex) {
            System.out.println("Erro ao retornar a especie: " + ex.getMessage());            
        }
        
        return _e;
        
    }
        
    public Especie getEspecieByNome(String nome){
    
        Especie _e = null;
        
        BancoDeDados bd = new BancoDeDados();

        String query = " SELECT e.codigoespecie, e.nomeespecie FROM vetlion.especie e where nomeespecie = '" + nome + "'";
        ResultSet rs = bd.consultar(query);
        
        try {
            if (rs.next()){
                 _e = new Especie();
                 _e.setCodigoEspecie(rs.getInt("CODIGOESPECIE"));
                 _e.setNome(rs.getString("NOMEESPECIE"));
            }
        } catch (SQLException ex) {
            System.out.println("Erro ao retornar a especie: " + ex.getMessage());            
        }
        
        return _e;        
    }
        
    public Especie getEspecieByCodigo(int codigoEspecie){
    
        Especie _e = null;
        
        BancoDeDados bd = new BancoDeDados();

        String query = " SELECT e.codigoespecie, e.nomeespecie FROM vetlion.especie e where codigoespecie = '" + codigoEspecie + "'";
        ResultSet rs = bd.consultar(query);
        
        try {
            if (rs.next()){
                 _e = new Especie();
                 _e.setCodigoEspecie(rs.getInt("CODIGOESPECIE"));
                 _e.setNome(rs.getString("NOMEESPECIE"));
            }
        } catch (SQLException ex) {
            System.out.println("Erro ao retornar a especie: " + ex.getMessage());            
        }
        
        return _e;
        
    }
    
    public static int getCodigoProximo(){
    
        int ret = 0;
        
        BancoDeDados bd = new BancoDeDados();
        try{
            String query = "Select (max(codigoespecie) + 1) proximoCodigo from codigoespecie";            
            ResultSet rs = bd.consultar(query);
            if(rs.next()){
                ret = rs.getInt("proximoCodigo");
            }
        } catch (SQLException ex){
            System.out.println("Erro ao buscar o proximo codigo da especie: " + ex.getMessage());
        }
        bd.desconectar();
        
        return ret; 
        
    }     
    
    
}
